/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is Forte for Java, Community Edition. The Initial
* Developer of the Original Code is Sun Microsystems, Inc. Portions
* Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.form.compat2.border;
import java.awt.*;
import java.beans.*;
import javax.swing.border.*;
import javax.swing.JButton;
import javax.swing.SwingUtilities;
import org.openide.explorer.propertysheet.editors.ChoicePropertyEditor;
import org.openide.nodes.*;
import org.netbeans.modules.form.FormUtils;
/**
*
* @author Petr Hamernik
* @version 1.02, Aug 07, 1998
*/
public abstract class BevelAbstractBorderInfo extends BorderInfoSupport {
/** generated Serialized Version UID */
static final long serialVersionUID = 720699432057720228L;
private static final String PROP_BEVEL_TYPE = "bevelType"; // NOI18N
private static final String PROP_HIGHLIGHT_INNER = "highlightInner"; // NOI18N
private static final String PROP_HIGHLIGHT_OUTER = "highlightOuter"; // NOI18N
private static final String PROP_SHADOW_INNER = "shadowInner"; // NOI18N
private static final String PROP_SHADOW_OUTER = "shadowOuter"; // NOI18N
private final static BevelBorder DEFAULT_BORDER = new BevelBorder(BevelBorder.RAISED);
private static int DEFAULT_BEVEL_TYPE = BevelBorder.RAISED;
private static Color DEFAULT_HIGHLIGHT_INNER;
private static Color DEFAULT_HIGHLIGHT_OUTER;
private static Color DEFAULT_SHADOW_INNER;
private static Color DEFAULT_SHADOW_OUTER;
static {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
initDefaults();
}
});
}
private static final int[][] constructors = new int[][] { {0}, {0,1,2}, {0,1,2,3,4} };
protected int bevelType;
protected Color highlightInner;
protected Color highlightOuter;
protected Color shadowInner;
protected Color shadowOuter;
public BevelAbstractBorderInfo() {
initDefaults();
bevelType = DEFAULT_BEVEL_TYPE;
highlightInner = DEFAULT_HIGHLIGHT_INNER;
highlightOuter = DEFAULT_HIGHLIGHT_OUTER;
shadowInner = DEFAULT_SHADOW_INNER;
shadowOuter = DEFAULT_SHADOW_OUTER;
}
static void initDefaults() {
synchronized (DEFAULT_BORDER) {
if (DEFAULT_HIGHLIGHT_INNER == null) {
JButton b = new JButton();
DEFAULT_HIGHLIGHT_INNER = DEFAULT_BORDER.getHighlightInnerColor(b);
DEFAULT_HIGHLIGHT_OUTER = DEFAULT_BORDER.getHighlightOuterColor(b);
DEFAULT_SHADOW_INNER = DEFAULT_BORDER.getShadowInnerColor(b);
DEFAULT_SHADOW_OUTER = DEFAULT_BORDER.getShadowOuterColor(b);
}
}
}
protected BevelBorder getBevelBorder() {
return (BevelBorder) getBorder();
}
protected abstract void updateBorder();
/** Returns the border's properties for specified component.
* The default implementation returns empty array.
* @param node the RADVisualNode of the component which properties we request
* @return the layout-specific properties for specified component
*/
public Node.Property[] getProperties() {
return new Node.Property[] {
new BorderProp(PROP_BEVEL_TYPE, Integer.TYPE,
BorderInfo.bundle.getString("PROP_BevelType"),
BorderInfo.bundle.getString("HINT_BevelType")) {
public Object getValue () {
return new Integer(bevelType);
}
public void setValue (Object val) throws IllegalArgumentException {
if (val instanceof Integer) {
bevelType = ((Integer)val).intValue();
updateBorder();
firePropChange();
}
else
throw new IllegalArgumentException();
}
public boolean isDefault() {
return DEFAULT_BORDER.getBevelType() == bevelType;
}
public PropertyEditor getPropertyEditor() {
return new ChoicePropertyEditor(
new int[] { BevelBorder.RAISED, BevelBorder.LOWERED },
new String[] {
BorderInfo.bundle.getString("VALUE_BevelRaised"),
BorderInfo.bundle.getString("VALUE_BevelLowered")
}
);
}
},
new BorderProp(PROP_HIGHLIGHT_INNER, Color.class,
BorderInfo.bundle.getString("PROP_HighlightInner"),
BorderInfo.bundle.getString("HINT_HighlightInner")) {
public Object getValue () {
return highlightInner;
}
public void setValue (Object val) throws IllegalArgumentException {
if (val instanceof Color) {
highlightInner = (Color)val;
updateBorder();
firePropChange();
}
else
throw new IllegalArgumentException();
}
public boolean isDefault() {
return DEFAULT_HIGHLIGHT_INNER.equals(highlightInner);
}
},
new BorderProp(PROP_HIGHLIGHT_OUTER, Color.class,
BorderInfo.bundle.getString("PROP_HighlightOuter"),
BorderInfo.bundle.getString("HINT_HighlightOuter")) {
public Object getValue () {
return highlightOuter;
}
public void setValue (Object val) throws IllegalArgumentException {
if (val instanceof Color) {
highlightOuter = (Color)val;
updateBorder();
firePropChange();
}
else
throw new IllegalArgumentException();
}
public boolean isDefault() {
return DEFAULT_HIGHLIGHT_OUTER.equals(highlightOuter);
}
},
new BorderProp(PROP_SHADOW_INNER, Color.class,
BorderInfo.bundle.getString("PROP_ShadowInner"),
BorderInfo.bundle.getString("HINT_ShadowInner")) {
public Object getValue () {
return shadowInner;
}
public void setValue (Object val) throws IllegalArgumentException {
if (val instanceof Color) {
shadowInner = (Color)val;
updateBorder();
firePropChange();
}
else
throw new IllegalArgumentException();
}
public boolean isDefault() {
return DEFAULT_SHADOW_INNER.equals(shadowInner);
}
},
new BorderProp(PROP_SHADOW_OUTER, Color.class,
BorderInfo.bundle.getString("PROP_ShadowOuter"),
BorderInfo.bundle.getString("HINT_ShadowOuter")) {
public Object getValue () {
return shadowOuter;
}
public void setValue (Object val) throws IllegalArgumentException {
if (val instanceof Color) {
shadowOuter = (Color)val;
updateBorder();
firePropChange();
}
else
throw new IllegalArgumentException();
}
public boolean isDefault() {
return DEFAULT_SHADOW_OUTER.equals(shadowOuter);
}
}
};
}
protected int[][] getConstructors() {
return constructors;
}
//--------------------------------------------------------------------------
// XMLPersistence implementation
public static final String XML_BEVEL_BORDER = "BevelBorder"; // NOI18N
public static final String ATTR_TYPE = "bevelType"; // NOI18N
public static final String ATTR_HIGHLIGHT_INNER = "highlightInner"; // NOI18N
public static final String ATTR_HIGHLIGHT_OUTER = "highlightOuter"; // NOI18N
public static final String ATTR_SHADOW_INNER = "shadowInner"; // NOI18N
public static final String ATTR_SHADOW_OUTER = "shadowOuter"; // NOI18N
/** Called to load property value from specified XML subtree. If succesfully loaded,
* the value should be available via the getValue method.
* An IOException should be thrown when the value cannot be restored from the specified XML element
* @param element the XML DOM element representing a subtree of XML from which the value should be loaded
* @exception IOException thrown when the value cannot be restored from the specified XML element
*/
public void readFromXML (org.w3c.dom.Node element) throws java.io.IOException {
if (!XML_BEVEL_BORDER.equals (element.getNodeName ())) {
throw new java.io.IOException ();
}
org.w3c.dom.NamedNodeMap attributes = element.getAttributes ();
try {
org.w3c.dom.Node aNode = attributes.getNamedItem (ATTR_TYPE);
if(aNode != null) {
bevelType = Integer.parseInt (aNode.getNodeValue ());
}
Color read;
read = (Color) FormUtils.readProperty (ATTR_HIGHLIGHT_INNER, Color.class, element);
if (read != null) highlightInner = read;
read = (Color) FormUtils.readProperty (ATTR_HIGHLIGHT_OUTER, Color.class, element);
if (read != null) highlightOuter = read;
read = (Color) FormUtils.readProperty (ATTR_SHADOW_INNER, Color.class, element);
if (read != null) shadowInner = read;
read = (Color) FormUtils.readProperty (ATTR_SHADOW_OUTER, Color.class, element);
if (read != null) shadowOuter = read;
updateBorder ();
} catch (Exception e) {
throw new java.io.IOException (e.toString());
}
}
/** Called to store current property value into XML subtree. The property value should be set using the
* setValue method prior to calling this method.
* @param doc The XML document to store the XML in - should be used for creating nodes only
* @return the XML DOM element representing a subtree of XML from which the value should be loaded or null if there is no state to save
*/
public org.w3c.dom.Node storeToXML(org.w3c.dom.Document doc) {
org.w3c.dom.Element el = doc.createElement (XML_BEVEL_BORDER);
if (bevelType != DEFAULT_BEVEL_TYPE) el.setAttribute (ATTR_TYPE, Integer.toString (bevelType));
if(!highlightInner.equals (DEFAULT_HIGHLIGHT_INNER)) {
FormUtils.writeProperty (ATTR_HIGHLIGHT_INNER, highlightInner, Color.class, el, doc);
}
if(!highlightOuter.equals (DEFAULT_HIGHLIGHT_OUTER)) {
FormUtils.writeProperty (ATTR_HIGHLIGHT_OUTER, highlightOuter, Color.class, el, doc);
}
if(!shadowInner.equals (DEFAULT_SHADOW_INNER)) {
FormUtils.writeProperty (ATTR_SHADOW_INNER, shadowInner, Color.class, el, doc);
}
if(!shadowOuter.equals (DEFAULT_SHADOW_OUTER)) {
FormUtils.writeProperty (ATTR_SHADOW_OUTER, shadowOuter, Color.class, el, doc);
}
return el;
}
}
/*
* Log
* 8 Gandalf 1.7 1/12/00 Ian Formanek NOI18N
* 7 Gandalf 1.6 12/9/99 Pavel Buzek
* 6 Gandalf 1.5 11/24/99 Pavel Buzek added support for saving
* in XML format
* 5 Gandalf 1.4 10/23/99 Ian Formanek NO SEMANTIC CHANGE - Sun
* Microsystems Copyright in File Comment
* 4 Gandalf 1.3 9/28/99 Petr Hamernik #4052 fixed
* 3 Gandalf 1.2 6/30/99 Ian Formanek reflecting package
* change of ChoicePropertyEditor
* 2 Gandalf 1.1 6/8/99 Ian Formanek ---- Package Change To
* org.openide ----
* 1 Gandalf 1.0 4/2/99 Ian Formanek
* $
*/